package gameObjects;

import java.io.IOException;
import java.net.URL;
import arena.Arena;
import com.jme.scene.Node;
import com.jme.scene.Spatial;
import com.jme.util.export.binary.BinaryImporter;
/**
 * <code>Classe che carica il modello3D della moto e applica le texture.
 * Il modello caricato viene inviato alla superclasse
 * {@link Node} che gestisce tutto il modello nel gioco.
 * La classe deriva da {@link Bike}</code>
 * 
 * @author Massimiliano Palermo
 * @version 0.9b
 *
 */
public class Guardian extends Node{
	private static final long serialVersionUID = 1904101613L;
	private int color;
	
	/**
	 * Costruttore
	 * @param name: {@link String} nome dell'oggetto da creare
	 * @param color: {@link Integer} colore del modello
	 * @param modelPath: {@link String} percorso del modello da caricare
	 * @throws IOException
	 */
	public Guardian(String name) throws IOException
	{
		super(name);
		this.attachChild(this.getModel("objects/guardian.jme"));
		this.setNormalizeObject();
		this.setMaterial();
	}
	
	public int getColor()
	{
		return color;
	}
	
	private void setMaterial()
	{
		Material mat = new Material();
		Node node    = new Node();
		
		node = (Node) this.getChild(0);
		mat.setMaterial(Arena.colorAmb);
		node.setRenderState(mat.getMaterial());
		
		node = (Node) super.getChild("TANK");
		node = (Node) node.getChild("RIGHT");
		mat.setMaterial(Arena.colorAmb);
		node.setRenderState(mat.getMaterial());
		
		node = (Node) super.getChild("TANK");
		node = (Node) node.getChild("LEFT");
		mat.setMaterial(Arena.colorAmb);
		node.setRenderState(mat.getMaterial());
		
		node = (Node) super.getChild("TANK");
		node = (Node) node.getChild("BODY");
		mat.setMaterial(Arena.colorAmb);
		node.setRenderState(mat.getMaterial());
	}
	
	/**
	 * Funzione che ridimensiona il modello 3D
	 * @return {@link Spatial}: modello 3D
	 */
	public Spatial setNormalizeObject()
	{
		this.setLocalScale(0.0015f);
        return this;
	}
	
	/**
	 * Funzione che carica il modello 3D memorizzato nella
	 * superclasse {@link Bike}
	 * @return {@link Spatial}: il modello 3D
	 * @throws IOException
	 */
	public Spatial getModel(String path) throws IOException
	{
		URL url = Guardian.class.getClassLoader().getResource(path);
		BinaryImporter importer = new BinaryImporter();
		Spatial model = (Spatial) importer.load(url);
		model.setName(path);
		model.setCullHint(CullHint.Dynamic);
		return model;
	}
	
}
